Temario

¿Qué es R?

Logo de R Logo de R Studio
Logo R R Studio

“ R es un lenguaje y ambiente de programación libre para visualización y análisis estadístico de datos”.

¿Por qué R?

Búsqueda de R en el tiempo

Ventajas

  • Open Source (Costo nulo), Comunidad dinámica integrada por estadísticos de renombre(Stackoverflow, Comunidad R Hispano, R en español, R Bloggers)
  • Multi-plataforma: Disponible para Windows, Mac y Linux
  • Facilidad de enlace con LateX, HTML, RMarkdown y generar reportes dinámicos.
  • Amplia bibliografía en la web y libros publicados por editoriales prestigiosas (Springer, Wiley, Chapman & Hall,. . . )

¿Quiénes usan R?

Gráficos

Desventajas

Instalación de R y R Studio

En la dirección https://cran.r-project.org/ podrá descargar R para sistemas operativos Linux, Mac OS y Windows.

R Studio es un ambiente de desarrollo integrado (IDE) que facilita la programación en R. En la dirección https://www.rstudio.com/ se descarga la versión de R Studio, disponible tambien para sistemas operativos linux, OS y windows.

R Studio esta dividido en 4 partes:

Pantalla RStudio

Pantalla RStudio

Directorio de trabajo

R y R Studio tienen como directorio de trabajo la carpeta de Documentos de la computadora donde se instalan.

1. Uso de R como calculadora

Simbolo Operación
+, -, *, / log() suma, resta, producto, cociente logaritmo
%%, %/%, ^ módulo, cociente entero, potencia
==, !=, ! igual, distinto, no
>, >=, <, <= mayor que, mayor o igual que, menor que, menor o igual que
:, seq() generar una serie

Alguna operaciones básicas y lógicas:

1+6             
## [1] 7
2*8             
## [1] 16
log(10)         #logaritmo natural si quiere cambiar de base  por ej log10()
## [1] 2.302585
9 %% 4          
## [1] 1
9%/%4
## [1] 2
9==4
## [1] FALSE
9>=4
## [1] TRUE
1:50
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
## [47] 47 48 49 50
seq(1,50,.1)
##   [1]  1.0  1.1  1.2  1.3  1.4  1.5  1.6  1.7  1.8  1.9  2.0  2.1  2.2  2.3
##  [15]  2.4  2.5  2.6  2.7  2.8  2.9  3.0  3.1  3.2  3.3  3.4  3.5  3.6  3.7
##  [29]  3.8  3.9  4.0  4.1  4.2  4.3  4.4  4.5  4.6  4.7  4.8  4.9  5.0  5.1
##  [43]  5.2  5.3  5.4  5.5  5.6  5.7  5.8  5.9  6.0  6.1  6.2  6.3  6.4  6.5
##  [57]  6.6  6.7  6.8  6.9  7.0  7.1  7.2  7.3  7.4  7.5  7.6  7.7  7.8  7.9
##  [71]  8.0  8.1  8.2  8.3  8.4  8.5  8.6  8.7  8.8  8.9  9.0  9.1  9.2  9.3
##  [85]  9.4  9.5  9.6  9.7  9.8  9.9 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7
##  [99] 10.8 10.9 11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 12.0 12.1
## [113] 12.2 12.3 12.4 12.5 12.6 12.7 12.8 12.9 13.0 13.1 13.2 13.3 13.4 13.5
## [127] 13.6 13.7 13.8 13.9 14.0 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 14.9
## [141] 15.0 15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9 16.0 16.1 16.2 16.3
## [155] 16.4 16.5 16.6 16.7 16.8 16.9 17.0 17.1 17.2 17.3 17.4 17.5 17.6 17.7
## [169] 17.8 17.9 18.0 18.1 18.2 18.3 18.4 18.5 18.6 18.7 18.8 18.9 19.0 19.1
## [183] 19.2 19.3 19.4 19.5 19.6 19.7 19.8 19.9 20.0 20.1 20.2 20.3 20.4 20.5
## [197] 20.6 20.7 20.8 20.9 21.0 21.1 21.2 21.3 21.4 21.5 21.6 21.7 21.8 21.9
## [211] 22.0 22.1 22.2 22.3 22.4 22.5 22.6 22.7 22.8 22.9 23.0 23.1 23.2 23.3
## [225] 23.4 23.5 23.6 23.7 23.8 23.9 24.0 24.1 24.2 24.3 24.4 24.5 24.6 24.7
## [239] 24.8 24.9 25.0 25.1 25.2 25.3 25.4 25.5 25.6 25.7 25.8 25.9 26.0 26.1
## [253] 26.2 26.3 26.4 26.5 26.6 26.7 26.8 26.9 27.0 27.1 27.2 27.3 27.4 27.5
## [267] 27.6 27.7 27.8 27.9 28.0 28.1 28.2 28.3 28.4 28.5 28.6 28.7 28.8 28.9
## [281] 29.0 29.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 29.9 30.0 30.1 30.2 30.3
## [295] 30.4 30.5 30.6 30.7 30.8 30.9 31.0 31.1 31.2 31.3 31.4 31.5 31.6 31.7
## [309] 31.8 31.9 32.0 32.1 32.2 32.3 32.4 32.5 32.6 32.7 32.8 32.9 33.0 33.1
## [323] 33.2 33.3 33.4 33.5 33.6 33.7 33.8 33.9 34.0 34.1 34.2 34.3 34.4 34.5
## [337] 34.6 34.7 34.8 34.9 35.0 35.1 35.2 35.3 35.4 35.5 35.6 35.7 35.8 35.9
## [351] 36.0 36.1 36.2 36.3 36.4 36.5 36.6 36.7 36.8 36.9 37.0 37.1 37.2 37.3
## [365] 37.4 37.5 37.6 37.7 37.8 37.9 38.0 38.1 38.2 38.3 38.4 38.5 38.6 38.7
## [379] 38.8 38.9 39.0 39.1 39.2 39.3 39.4 39.5 39.6 39.7 39.8 39.9 40.0 40.1
## [393] 40.2 40.3 40.4 40.5 40.6 40.7 40.8 40.9 41.0 41.1 41.2 41.3 41.4 41.5
## [407] 41.6 41.7 41.8 41.9 42.0 42.1 42.2 42.3 42.4 42.5 42.6 42.7 42.8 42.9
## [421] 43.0 43.1 43.2 43.3 43.4 43.5 43.6 43.7 43.8 43.9 44.0 44.1 44.2 44.3
## [435] 44.4 44.5 44.6 44.7 44.8 44.9 45.0 45.1 45.2 45.3 45.4 45.5 45.6 45.7
## [449] 45.8 45.9 46.0 46.1 46.2 46.3 46.4 46.5 46.6 46.7 46.8 46.9 47.0 47.1
## [463] 47.2 47.3 47.4 47.5 47.6 47.7 47.8 47.9 48.0 48.1 48.2 48.3 48.4 48.5
## [477] 48.6 48.7 48.8 48.9 49.0 49.1 49.2 49.3 49.4 49.5 49.6 49.7 49.8 49.9
## [491] 50.0

2. Asignar valores a variables.

Para asignar valor a variables se usan los simbolos <- o =

x <- 8
y <- 1+6
z = seq(1,50,.5)

Si se quiere que se muestren los valores solo debe teclear los nombres y ejecutar (ejecutar desde editor de texto o desde consola)

x
## [1] 8
y
## [1] 7
z
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5
## [15]  8.0  8.5  9.0  9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5
## [29] 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0 20.5 21.0 21.5
## [43] 22.0 22.5 23.0 23.5 24.0 24.5 25.0 25.5 26.0 26.5 27.0 27.5 28.0 28.5
## [57] 29.0 29.5 30.0 30.5 31.0 31.5 32.0 32.5 33.0 33.5 34.0 34.5 35.0 35.5
## [71] 36.0 36.5 37.0 37.5 38.0 38.5 39.0 39.5 40.0 40.5 41.0 41.5 42.0 42.5
## [85] 43.0 43.5 44.0 44.5 45.0 45.5 46.0 46.5 47.0 47.5 48.0 48.5 49.0 49.5
## [99] 50.0

3. ¿Cómo leer datos?

c() Concatenar

Una primera opción es haciendo uso de la función concatenar c() . Ésta se usa para crear un vector.

La siguiente instrucción crea el objeto q y le asigna un vector

q <- c(1,2,3,4,5,6) # vector numérico
s <- c("si","no")   # vector de caracteres

q # para imprimir en pantalla
## [1] 1 2 3 4 5 6
s
## [1] "si" "no"

Se puede unir vectores con las funciones cbind() o rbind(). Por ejemplo, crear tres vectores de 5 elementos y asignar un nombre (edad,altura,nombre).

# Se crean los 3 objetos

edad <- c(20,25,31,45,14)
altura <- c(1.60, 1.8,1.7,1.85,1.7)
nombre <- c("Yola","Pedro","Carlos","Maru","Ginger")

# Unir dos vectores rbind(x,y,z) y cbind(x,y,z) y asignar un nombre w

w1<-rbind(nombre,edad,altura)
w2<-cbind(nombre,edad,altura)

# Se muestran los objetos creados

w1
##        [,1]   [,2]    [,3]     [,4]   [,5]    
## nombre "Yola" "Pedro" "Carlos" "Maru" "Ginger"
## edad   "20"   "25"    "31"     "45"   "14"    
## altura "1.6"  "1.8"   "1.7"    "1.85" "1.7"
w2
##      nombre   edad altura
## [1,] "Yola"   "20" "1.6" 
## [2,] "Pedro"  "25" "1.8" 
## [3,] "Carlos" "31" "1.7" 
## [4,] "Maru"   "45" "1.85"
## [5,] "Ginger" "14" "1.7"

Importar archivo csv

Para leer datos de un documento csv se usa la función read.csv(“nombre de archivo”)

# El siguiente código asigna al objeto w el archivo de datos EjemploEstudiantes.csv que se encuentra en el directorio "Documentos" y la opción header=T le indican a R que en el primer renglón se ubican los nombres de las variables.

w<-read.csv("EjemploEstudiantesM.csv",header = T)

# opciOnal y posiblemente mejor 

#read.csv(choose.files(),header = T)

4. Operaciones con vectores + - * / lógicas

Con los vectores se pueden realizar operaciones:

edad+2             # Suma a las edades 2
## [1] 22 27 33 47 16
altura^2          # las alturas se elevan al cuadrado
## [1] 2.5600 3.2400 2.8900 3.4225 2.8900
edad==altura      # verifica si edad y altura son identicos 
## [1] FALSE FALSE FALSE FALSE FALSE
edad==edad
## [1] TRUE TRUE TRUE TRUE TRUE

Los [ ] se usan para acceder a elementos en un vector, por ejemplo, x[3:4] sirve para acceder a la posición 3 y 4 del objeto x. Tambienpodremos usar x[c(3,4)]

edad[2]                     # accede al elemento 2 de la edad
## [1] 25
edad[2:4]                   # accede a los elementos 2,3 y 4
## [1] 25 31 45
edad[c(2,3,4)]              
## [1] 25 31 45
edad[edad<40]               # accede a los elementos que cumplela condición  de
## [1] 20 25 31 14
                            # ser menores que 40
edad[edad<40 & edad>20]     # elementos que son menores que 40 y mayores que 20
## [1] 25 31
edad[edad<40 | edad>20]     # elementos que son menores que 40 o mayores que 20
## [1] 20 25 31 45 14

De la misma manera, para acceder a los elementos de una matriz se usa cualquiera de los siguientes formatos: x[row,column], x[,“Height”] , x[,2]

w2[1,2]        # accede al lemento 1 de la columna 2
## edad 
## "20"
w2[ ,"edad" ]  # accede a la columna edad
## [1] "20" "25" "31" "45" "14"

Para la selección de una columna o de algún elemento de un dataframe tambien se usan los siguientes formatos:

w$Matematicas
##  [1] 7.0 7.5 7.6 5.0 6.0 7.8 6.3 7.9 6.0 1.8
w[w$genero=="M",]
##    Nombre genero Matematicas Ciencias Espanol Historia EdFisica
## 1   Lucia      M         7.0      6.5     9.2      8.6      8.0
## 3    Ines      M         7.6      9.2     8.0      8.0      7.5
## 6     Ana      M         7.8      9.6     7.7      8.0      6.5
## 9   Sonia      M         6.0      6.0     6.5      5.5      8.7
## 10  Maria      M         1.8      7.2     8.7      9.0      7.0
w[w$Matematicas>6,]
##   Nombre genero Matematicas Ciencias Espanol Historia EdFisica
## 1  Lucia      M         7.0      6.5     9.2      8.6      8.0
## 2  Pedro      H         7.5      9.4     7.3      7.0      7.0
## 3   Ines      M         7.6      9.2     8.0      8.0      7.5
## 6    Ana      M         7.8      9.6     7.7      8.0      6.5
## 7 Carlos      H         6.3      6.4     8.2      9.0      7.2
## 8   Jose      H         7.9      9.7     7.5      8.0      6.0

5. Realizar un análisis descriptivo

Considerando que tenemos un dataframe, para realizar un análisis descriptivo y de inferencia

1. Localización de los datos

Deben ubicarse el mínimo y el máximo de los datos, calcularse las medidas de tendencia central y los percentiles.

# Para el mínimo y el máximo la función es min() y max()
min(w$Matematicas)
## [1] 1.8
max(w$Matematicas)
## [1] 7.9
# Tres medidas de tendencia central usadas son el promedio, la mediana y la moda. Para la media se usa la función mean(), para la mediana median() y para la moda podemos usar table()
mean(w$Ciencias)
## [1] 7.65
median(w$Matematicas)
## [1] 6.65
table(w$Matematicas)
## 
## 1.8   5   6 6.3   7 7.5 7.6 7.8 7.9 
##   1   1   2   1   1   1   1   1   1
# Los cuantiles son aquellos valores que dejan por debajo de ellos un determinado porcentaje de los datos
quantile(w$Matematicas)
##    0%   25%   50%   75%  100% 
## 1.800 6.000 6.650 7.575 7.900

2. Variabilidad

Las medidas de localización deben acompañarse con una medida de la variación de los datos. Usualmente se calculan la amplitud, varianza y desviación estándar.

# La amplitud se defime como la diferencia del valor máximo y el mímino

range(w$Matematicas)
## [1] 1.8 7.9
# La varianza y la desviación estándar

var(w$Matematicas)
## [1] 3.394333
sd(w$Matematicas)
## [1] 1.842372

3. Distribución de las frecuencias

La forma que tiene la distribución de las frecuencias de los datos es importante por ejemplo al seleccionar la medida de tendencia central a usar o la prueba estádistica que aplica para ese tipo de datos.

El gráfico útil para ver la forma de los datos es el histograma, cuya función en R es hist()

hist(w$Matematicas)

En el caso de variables cualitativas, puede construirse un gráfico de barras o uno de pastel

# Primero se hace una tabla con las frecuencias 
frecuencia <- table(w$genero)
barplot(frecuencia, main="Cantidad de hombres y mujeres")

pie(frecuencia, main="Cantidad de hombres y mujeres")

4. Valores extremos

Los valores muy grandes o muy pequeños afectan a las medidas de localización y a las de variabilidad, por esto, es importante verificar la existencia de éstos valores que en Estadística se denominan “extremos”.

Hay varios métodos para detectar valores extremos, uno de ellos son los boxplot o graficos de caja y bigote.

# Si un dato queda fuera de los bigotes de la caja, es extremo
boxplot(w$Matematicas)

# Genera un boxplot para las columnas de la 3 a la 6 del objeto W
boxplot(w[,c(3:6)])

# Genera un boxplot para las calificaciones de Matemáticas y Ciencias
boxplot(w$Matematicas,w$Ciencias)

5. Relación entre variables.

Es importante en ocasiones estudiar la relación que existe entre las variables de interés. En éstas situaciones el diagrama de dispersión y el coeficiente de correlación son dos herramientas indispensables.

# El gráfico de dispersión de las calificaciones de Educación Física y Español
plot(w$EdFisica,w$Ciencias)

# El coeficiente de correlación
cor(w$EdFisica,w$Espanol)
## [1] -0.3655434

La función summary() da un resumen descrptivo de los datos.

summary(w)
##      Nombre  genero  Matematicas       Ciencias        Espanol    
##  Ana    :1   H:5    Min.   :1.800   Min.   :6.000   Min.   :6.50  
##  Andres :1   M:5    1st Qu.:6.000   1st Qu.:6.425   1st Qu.:7.35  
##  Carlos :1          Median :6.650   Median :6.850   Median :7.75  
##  Ines   :1          Mean   :6.290   Mean   :7.650   Mean   :7.74  
##  Jose   :1          3rd Qu.:7.575   3rd Qu.:9.350   3rd Qu.:8.15  
##  Lucia  :1          Max.   :7.900   Max.   :9.700   Max.   :9.20  
##  (Other):4                                                        
##     Historia        EdFisica    
##  Min.   :5.500   Min.   :6.000  
##  1st Qu.:7.250   1st Qu.:7.000  
##  Median :8.000   Median :7.250  
##  Mean   :7.900   Mean   :7.420  
##  3rd Qu.:8.825   3rd Qu.:7.875  
##  Max.   :9.000   Max.   :9.000  
## 

¿Qué pasa cuando hay valores faltantes?

En muchas ocasiones (casi siempre :) ) hay datos faltantes. Automaticamente, en R , toda celda con las letras NA es considerada un valor ausente.

Para el uso de algunas funciones se debe informar a R de la existencia de valores extraviados.

# Se llama al archivo con valores extraviados y se almacena en ww
ww<-read.csv("EjemploEstudiantesM_NA.csv",header=T)

# Se calcula la media indicando que hay valores extraviados
mean(ww$Matematicas,na.rm=T)
## [1] 6.711111
summary(ww)
##      Nombre  genero  Matematicas       Ciencias        Espanol    
##  Ana    :1   H:5    Min.   :5.000   Min.   :6.000   Min.   :6.50  
##  Andres :1   M:5    1st Qu.:6.000   1st Qu.:6.425   1st Qu.:7.35  
##  Carlos :1          Median :6.800   Median :6.850   Median :7.75  
##  Ines   :1          Mean   :6.711   Mean   :7.650   Mean   :7.74  
##  Jose   :1          3rd Qu.:7.600   3rd Qu.:9.350   3rd Qu.:8.15  
##  Lucia  :1          Max.   :7.900   Max.   :9.700   Max.   :9.20  
##  (Other):4          NA's   :1                                     
##     Historia      EdFisica    
##  Min.   :5.5   Min.   :6.000  
##  1st Qu.:8.0   1st Qu.:7.000  
##  Median :8.0   Median :7.250  
##  Mean   :8.0   Mean   :7.420  
##  3rd Qu.:8.9   3rd Qu.:7.875  
##  Max.   :9.0   Max.   :9.000  
##  NA's   :1

Lugares para aprender https://www.r-bloggers.com/ http://rpubs.com/ https://www.coursera.org/ https://www.edx.org/ https://www.datacamp.com/